package org.dromara.monitor.admin.config;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration;
import org.springframework.boot.task.ThreadPoolTaskExecutorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Lazy;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.concurrent.Executor;


/**
 * @Author 刘武贵
 * @Date 2024/8/15 22:00
 * @Description 功能描述：springboot-admin server配置类
 */
@Configuration
// 启用Admin Server功能，用于监控和管理应用程序
@EnableAdminServer
public class AdminServerConfig {

    /**
     * 配置应用程序任务执行器
     * 此方法定义了一个线程池任务执行器，用于异步任务的执行
     * 通过条件注解 @ConditionalOnMissingBean(Executor.class)，确保在没有其他Executor bean定义时，才创建此线程池任务执行器
     * 使用 @Bean 注解为Spring上下文中的APPLICATION_TASK_EXECUTOR_BEAN_NAME提供一个bean实例
     *
     * @param builder 线程池任务执行器构建器，用于创建ThreadPoolTaskExecutor实例
     * @return 创建的ThreadPoolTaskExecutor实例，用于执行异步任务
     */
    @Lazy
    // 定义一个名为APPLICATION_TASK_EXECUTOR_BEAN_NAME的Bean，类型为Executor
    // 该Bean用于自动配置任务执行器，如果容器中已存在Executor类的Bean，则不会创建该Bean
    @Bean(name = TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)
    @ConditionalOnMissingBean(Executor.class)
    public ThreadPoolTaskExecutor applicationTaskExecutor(ThreadPoolTaskExecutorBuilder builder) {
        return builder.build();
    }


}
